package com.qidian.mes.md.mapper;

import com.qidian.mes.md.vo.*;
import com.qidian.mes.pojo.Product;
import com.qidian.mes.util.pojo.QdResult;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author: CoolPro
 * @Description: 产品信息管理
 * @Time: 2024-04-04 11:05
 **/
@Mapper

public interface ProductMapper {

    /**
     * @param productName
     * @param classifyId
     * @param model
     * @param stockStatus
     * @Author: CoolPro
     * @Date: 7/4/2024
     * @Description: 模糊查询产品信息
     * @Name: findAll
     * @return: java.util.List<com.qidian.mes.md.vo.MaterialAndProductVO>
     */
    List<MaterialAndProductVO> findAll(
            @Param("productName") String productName,
            @Param("classifyId") Integer classifyId,
            @Param("model") String model,
            @Param("stockStatus") Integer stockStatus
    );

    /**
     * @param productId 产品编号
     * @Author: CoolPro
     * @Date: 4/4/2024
     * @Description: 查询产品的工单信息
     * @Name: queryByProductId
     * @return: java.util.List<com.qidian.mes.md.vo.ProductOrderVO>
     */
    List<ProductOrderVO> queryByProductId(@Param("idProduct") Integer productId);

    /**
     * @param idProduct 产品编号
     * @Author: CoolPro
     * @Date: 4/4/2024
     * @Description: 查询计划和实际完成量的信息
     * @Name: queryPlannedAndCompletionByProductId
     * @return: java.util.List<com.qidian.mes.md.vo.PlannedAndCompletionVO>
     */
    List<PlannedAndCompletionVO> queryPlannedAndCompletionByProductId(@Param("idProduct") Integer idProduct);

    //更新产品状态
    void updateStatus(@Param("id") Integer id, @Param("status") String status);

    List<MaterialAndProductVO> findById(@Param("id") Integer id);

    //更新产品安全库存阈值
    void updateInventory(@Param("id") Integer id, @Param("inventory") Integer inventory);

    //修改分类信息
    void updateClassify(@Param("classifyId") Integer classifyId, @Param("id") Integer id);

    //添加产品信息
    void insert(Product product);

    //删除产品
    void delete(@Param("id") Integer id);

    //更新产品信息
    void update(Product product);
}
